package com.atguigu.java;

/**
 *      一、设计类，其实就是设计类的成员
 *              属性 = 成员变量 = field = 域、字段
 *              方法 = 成员方法 = 函数 = method
 *
 *          创建类的对象 = 类的实例化 = 实例化类
 *
 *      二、类和对象的使用(面向对象思想落地的实现)
 *          1.创建类，设计类的成员
 *          2.创建类的对象
 *          3.通过 "对象.属性" 或者 "对象.方法"调用对象的结构
 *
 *      三、如果创建了一个类的多个对象，则每个对象都独立的拥有一套类的属性。(非static的)
 *          意味着：如果我们修改一个对象的属性a，则不影响另一个对象属性a的值。
 *
 *      四、对象的内存解析
 *
 *
 * @author : leimingchao
 * @date Date : 2021年07月24日 21:35
 */
public class PersonTest {
    public static void main(String[] args) {
        //创建Person类的对象
        Person person = new Person();
        //调用对象的结构:属性、方法
        //调用属性：对象.属性
        person.name = "Tom";
        person.isMale = true;
        System.out.println(person.name);

        //调用方法：对象.方法
        person.eat();
        person.sleep();
        person.talk("Chinese");
        System.out.println();
        //************************************
        Person person2 = new Person();
        System.out.println(person2.name);
        System.out.println(person2.isMale);
        System.out.println();
        //************************************
        //将person变量保存的对象的地址值赋给person3，导致person和person3指向了堆空间中的同一个对象实体
        Person person3 = person;
        System.out.println(person3.name);
        person3.age = 10;
        System.out.println(person.age);
    }
}

class Person {

    /**
     * 属性
     */
    String name;

    int age = 1;
    boolean isMale;

    /**
     * 方法
     */
    public void eat() {
        System.out.println("人可以吃饭");
    }

    public void sleep() {
        System.out.println("人可以睡觉");
    }

    public void talk(String language) {
        System.out.println("人可以说话，使用的是：" + language);
    }
}
